using System;
using System.Collections.Generic;
using System.Globalization;
using Medianamik.Core;
using SubSonic;

namespace Medianamik.Client.MVP.Model.DataAccess
{
    public interface IMedianamikRepository<TInterface> : IRepository<TInterface, Guid>, IMedianamikRepositoryBase<TInterface>
    {
        TInterface Get(Guid nodeId, CultureInfo culture);
        IEnumerable<TInterface> ChildsOf(Guid nodeId, bool inclusive, int maxDepth);
        IEnumerable<TInterface> ParentsOf(Guid nodeId, bool inclusive, int maxDepth);
        TInterface Get(Guid nodeId, CultureInfo culture, ContentState contentState);
        IEnumerable<TInterface> ChildsOf(Guid nodeId, bool inclusive, int maxDepth, ContentState contentState);
        IEnumerable<TInterface> ParentsOf(Guid nodeId, bool inclusive, int maxDepth, ContentState contentState);
        TInterface Get(Guid id, ContentState contentState);
        IEnumerable<TInterface> All(ContentState contentState);
        PagedCollection<TInterface> PagedWithFilters(ContentState contentState,
           int pageIndex, int pageSize, Guid? typeId, Guid? parentId, IEnumerable<Where> wheres,
           IEnumerable<BetweenAnd> betweensAnd, string orderByString);

        IEnumerable<TInterface> GetWithFilters(ContentState contentState, Guid? typeId, Guid? parentId,
                                                IEnumerable<Where> wheres, IEnumerable<BetweenAnd> betweensAnd, string orderByString);
    }
}